// function _request() {
//   return new Promise<number>((res) => setTimeout(() => {
//     res(123)
//   }, 3000))
// }
// function createPauseControllerPromise() {
//   const result = {
//     isPause: false,
//     resolveWhenResume: false,
//     resolve(value?: any) { },
//     pause() {
//       this.isPause = true
//     },
//     resume() {
//       if (!this.isPause) return
//       this.isPause = false
//       if (this.resolveWhenResume) {
//         this.resolve()
//       }
//     },
//     promise: Promise.resolve()
//   }
//   const promise = new Promise<void>((res) => {
//     result.resolve = res
//   })
//   result.promise = promise
//   return result
// }
// function requestWithPauseControl<T extends () => Promise<any>>(request: T) {
//   const controller = createPauseControllerPromise()
//   const controlRequest = request().then((data) => {
//     if (!controller.isPause) controller.resolve()
//     controller.resolveWhenResume = controller.isPause
//     return data
//   })
//   const result = Promise.all([controlRequest, controller.promise])
//     .then(data => data[0]);
//   result.finally(() => controller.resolve())
//     (result as any).pause = controller.pause.bind(controller);
//   (result as any).resume = controller.resume.bind(controller);
//   return result as ReturnType<T> & { pause: () => void, resume: () => void }
// }
// /* usage */
// const result = requestWithPauseControl(_request).then((data) => {
//   console.log(data)
// })
// if (Math.random() > 0.5) { result.pause() }
// setTimeout(() => {
//   result.resume()
// }, 4000)
